#ifndef ICHARACTER_HH
#define ICHARACTER_HH

#include <string>
#include <memory>
#include <vector>

namespace Game {
    class Item;

    class ICharacter {
    public:
        virtual ~ICharacter() = default;
        ICharacter() = default;
        ICharacter(const ICharacter&) = default;
        ICharacter& operator=(const ICharacter&) = default;

        // Core methods
        virtual bool isAlive() const = 0;
        virtual void takeDamage(int damage) = 0;
        virtual void attack(ICharacter& target) = 0;

        // Attribute getters
        virtual std::string getName() const = 0;
        virtual unsigned getHealth() const = 0;
        virtual unsigned getAttack() const = 0;
        virtual unsigned getDefense() const = 0;

        // Inventory management
        virtual void addItem(Item* item) = 0;
        virtual void displayInventory() const = 0;

        // Loot and cloning
        virtual std::unique_ptr<Item> generateDrop() const = 0;
        virtual std::unique_ptr<ICharacter> clone() const = 0;
    };
}

#endif